package dao.impl;

import java.util.ArrayList;
import java.util.List;

import modelo.MedicoQuarto;
import dao.MedicoQuartoDAO;
import excecao.ObjetoDuplicadoException;
import excecao.ObjetoNaoEncontradoException;
import modelo.Quarto;
import modelo.Medico;

public class MemoryMedicoQuartoDAO implements MedicoQuartoDAO {

    // Banco
    private ArrayList<MedicoQuarto> lista;
    private long seq;

    public MemoryMedicoQuartoDAO() {
        lista = new ArrayList<MedicoQuarto>();
        seq = 0;
    }

    public void inclui(MedicoQuarto umMedicoQuarto) throws ObjetoDuplicadoException {

        for (MedicoQuarto MedicoQuarto : lista) {
            if (MedicoQuarto.igual(umMedicoQuarto)) {
                throw new ObjetoDuplicadoException();
            }
        }
        umMedicoQuarto.setId(++seq);
        lista.add(umMedicoQuarto);
    }

    public void altera(MedicoQuarto umMedicoQuarto) throws ObjetoNaoEncontradoException {	// o Altera MedicoQuarto mas n�o altera os itens do carrinho
        boolean achou = false;

        for (MedicoQuarto medicoQuarto : lista) {
            if (medicoQuarto.igual(umMedicoQuarto)) {
                umMedicoQuarto.setId(medicoQuarto.getId());
                lista.remove(medicoQuarto);
                lista.add(umMedicoQuarto);
                achou = true;
                break;
            }
        }

        if (!achou) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public void exclui(MedicoQuarto umMedicoQuarto) throws ObjetoNaoEncontradoException {

        if (!lista.remove(umMedicoQuarto)) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public MedicoQuarto recuperaumMedicoQuarto(MedicoQuarto umMedicoQuarto)
            throws ObjetoNaoEncontradoException {

        for (MedicoQuarto MedicoQuarto : lista) {
            if (MedicoQuarto.igual(umMedicoQuarto)) {
                return MedicoQuarto;
            }
        }


        throw new ObjetoNaoEncontradoException();
    }

    public List<MedicoQuarto> recuperaMedicoQuartos() {
        return lista;
    }

    public MedicoQuarto recuperaMedicoQuartoCorrentePorMedico(Medico Medico) {

        MedicoQuarto MedicoQuarto = null;
        for (MedicoQuarto MedicoQuartoAux : lista) {
            if (MedicoQuartoAux.getMedico().igual(Medico) && (MedicoQuartoAux.getDataEncerramento() == null) ) {
                MedicoQuarto = MedicoQuartoAux;
            }
        }
        if (MedicoQuarto == null) {
            return null;
        }
        return MedicoQuarto;
    }

    
    public MedicoQuarto recuperaMedicoQuartoPorQuarto(Quarto quarto) {

        MedicoQuarto MedicoQuarto = null;
        for (MedicoQuarto MedicoQuartoAux : lista) {
            if (MedicoQuartoAux.getQuarto().igual(quarto)) {
                MedicoQuarto = MedicoQuartoAux;
            }
        }
        if (MedicoQuarto == null) {
            return null;
        }
        return MedicoQuarto;
    }
}
